{"componentChunkName":"component---src-templates-post-js","path":"/simply-learn-full-stack-intro","result":{"data":{"site":{"siteMetadata":{"title":"neohed","description":"Blog posts on web development and related areas","author":{"name":"neohed"},"keywords":["Web Development","JavaScript"]}},"mdx":{"frontmatter":{"title":"Simply Learn Full-Stack Web","description":"Tutorial to learn full-stack with React node.js and Prisma DB","date":"June 27, 2022","author":null,"banner":null,"slug":"simply-learn-full-stack-intro","keywords":null},"body":"function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"slug\": \"simply-learn-full-stack-intro\",\n  \"date\": \"2022-06-27T08:36:32\",\n  \"title\": \"Simply Learn Full-Stack Web\",\n  \"description\": \"Tutorial to learn full-stack with React node.js and Prisma DB\",\n  \"published\": true\n};\n\nvar makeShortcode = function makeShortcode(name) {\n  return function MDXDefaultShortcode(props) {\n    console.warn(\"Component \" + name + \" was not imported, exported, or provided by MDXProvider as global scope\");\n    return mdx(\"div\", props);\n  };\n};\n\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, [\"components\"]);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"h1\", null, \"Simply Learn Full-Stack React & Node.js\"), mdx(\"h2\", null, \"An easy tutorial series that teaches full-stack with React, Node.js, Prisma and SqlLite DB\"), mdx(\"p\", null, mdx(\"span\", _extends({\n    parentName: \"p\"\n  }, {\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"730px\"\n    }\n  }), \"\\n      \", mdx(\"a\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"gatsby-resp-image-link\",\n    \"href\": \"/static/ccf329c84596d3b7dd02c5d61f126fda/1a144/small-plant.jpg\",\n    \"style\": {\n      \"display\": \"block\"\n    },\n    \"target\": \"_blank\",\n    \"rel\": [\"noopener\"]\n  }), \"\\n    \", mdx(\"span\", _extends({\n    parentName: \"a\"\n  }, {\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"66.79536679536679%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAANABQDASIAAhEBAxEB/8QAGAAAAgMAAAAAAAAAAAAAAAAAAAIBAwT/xAAWAQEBAQAAAAAAAAAAAAAAAAAAAQL/2gAMAwEAAhADEAAAAcSTRg4hX//EABoQAAIDAQEAAAAAAAAAAAAAAAABAhESMkH/2gAIAQEAAQUCzApMpHm3GXR//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPwE//8QAFhEBAQEAAAAAAAAAAAAAAAAAARAR/9oACAECAQE/AR2f/8QAFxABAQEBAAAAAAAAAAAAAAAAAEEQEf/aAAgBAQAGPwJF3r//xAAdEAACAgIDAQAAAAAAAAAAAAAAAREhMUFRYXGx/9oACAEBAAE/IXFtESnTkTc26PsbBK/TJtUvR//aAAwDAQACAAMAAAAQwy//xAAWEQEBAQAAAAAAAAAAAAAAAAAAIQH/2gAIAQMBAT8Qmo//xAAXEQEAAwAAAAAAAAAAAAAAAAAAAREx/9oACAECAQE/EJcLf//EABsQAQEAAgMBAAAAAAAAAAAAAAERACExQVGB/9oACAEBAAE/EJqJAX1waVnCI/cucRj1zq1vJu95oRE94q+VRNDP/9k=')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  })), \"\\n  \", mdx(\"img\", _extends({\n    parentName: \"a\"\n  }, {\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"A small plant growing\",\n    \"title\": \"Big things have small beginnings\",\n    \"src\": \"/static/ccf329c84596d3b7dd02c5d61f126fda/1a144/small-plant.jpg\",\n    \"srcSet\": [\"/static/ccf329c84596d3b7dd02c5d61f126fda/8356d/small-plant.jpg 259w\", \"/static/ccf329c84596d3b7dd02c5d61f126fda/bc760/small-plant.jpg 518w\", \"/static/ccf329c84596d3b7dd02c5d61f126fda/1a144/small-plant.jpg 730w\"],\n    \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\"\n  })), \"\\n  \"), \"\\n    \")), mdx(\"p\", null, \"This series is simple and fast.  The code repo link will be at the bottom of each post. To use this tutorial there's no typing. Instead, as you read, you only need to:\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Create files and folders.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Paste in the code.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Run a few shell/CLI commands.\")), mdx(\"p\", null, \"I will make 2 or 3 posts per day over the next few days until this is finished. If you have any problems, questions or suggestions then please add them.\"), mdx(\"h3\", null, \"You need:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"node.js\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"npm\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"An editor\")), mdx(\"p\", null, \"If you don't have node or npm, these links should help: \", mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"https://nodejs.org/en/download/\"\n  }), \"Node.js\"), \", \", mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"https://docs.npmjs.com/downloading-and-installing-node-js-and-npm\"\n  }), \"NPM\")), mdx(\"p\", null, mdx(\"span\", _extends({\n    parentName: \"p\"\n  }, {\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"730px\"\n    }\n  }), \"\\n      \", mdx(\"a\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"gatsby-resp-image-link\",\n    \"href\": \"/static/6916044ed8bd3bb39b121843a259534a/1a144/training-padlock.jpg\",\n    \"style\": {\n      \"display\": \"block\"\n    },\n    \"target\": \"_blank\",\n    \"rel\": [\"noopener\"]\n  }), \"\\n    \", mdx(\"span\", _extends({\n    parentName: \"a\"\n  }, {\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"128.95752895752898%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAaABQDASIAAhEBAxEB/8QAGQAAAgMBAAAAAAAAAAAAAAAAAAMBAgQF/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEAMQAAAB76FXGlwyuZJIB//EABoQAAIDAQEAAAAAAAAAAAAAAAECAAMREDL/2gAIAQEAAQUCnpkOrZYVardAyWpEHD3/xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAEDAQE/AR//xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAECAQE/AR//xAAcEAACAgIDAAAAAAAAAAAAAAAAEQEhAhAgMVH/2gAIAQEABj8CJvosUGT0x+8f/8QAGxABAAIDAQEAAAAAAAAAAAAAAQARECExQVH/2gAIAQEAAT8hlJ1BxUb6hqLIJezsA0Q932uoVVcOIcx//9oADAMBAAIAAwAAABDnBwD/xAAVEQEBAAAAAAAAAAAAAAAAAAAQEf/aAAgBAwEBPxCFP//EABURAQEAAAAAAAAAAAAAAAAAABEg/9oACAECAQE/EGP/xAAcEAEBAQEAAgMAAAAAAAAAAAABEQAhEDFBUZH/2gAIAQEAAT8Q1HLAKdluPKqE/cZlE9eia5xSJCXhnAwVf3J65InzjdABySeALoOAACHj/9k=')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  })), \"\\n  \", mdx(\"img\", _extends({\n    parentName: \"a\"\n  }, {\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"A perspex training padlock\",\n    \"title\": \"Training Padlock\",\n    \"src\": \"/static/6916044ed8bd3bb39b121843a259534a/1a144/training-padlock.jpg\",\n    \"srcSet\": [\"/static/6916044ed8bd3bb39b121843a259534a/8356d/training-padlock.jpg 259w\", \"/static/6916044ed8bd3bb39b121843a259534a/bc760/training-padlock.jpg 518w\", \"/static/6916044ed8bd3bb39b121843a259534a/1a144/training-padlock.jpg 730w\"],\n    \"sizes\": \"(max-width: 730px) 100vw, 730px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\"\n  })), \"\\n  \"), \"\\n    \")), mdx(\"blockquote\", null, mdx(\"p\", {\n    parentName: \"blockquote\"\n  }, \"When you learn lock-picking you use training locks that expose the mechanism.\")), mdx(\"p\", null, \"When I learned full-stack web development (back in the 90's) my biggest problem was understanding how all the pieces fitted together.  I studied an app from an experienced developer, made changes - and it broke!\"), mdx(\"p\", null, \"The problem: a lot was going on that I couldn't see.  In this tutorial I will expose the \\\"conversation\\\" so you can see what's going on.  Because, full-stack, is really just a conversation between the web-site and the server and between the server and the DB; they communicate and they each do their own thing.\"), mdx(\"p\", null, \"I'm not going to explain in detail how the React code or CSS works. This is more about how the pieces fit together and communicate. I will explain in detail how the layers in the stack communicate and I will try to include some useful things I've learned, where relevant.\"), mdx(\"p\", null, mdx(\"span\", _extends({\n    parentName: \"p\"\n  }, {\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"600px\"\n    }\n  }), \"\\n      \", mdx(\"a\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"gatsby-resp-image-link\",\n    \"href\": \"/static/b0964860e29015189dd07a9bbb729630/b4294/get-started.jpg\",\n    \"style\": {\n      \"display\": \"block\"\n    },\n    \"target\": \"_blank\",\n    \"rel\": [\"noopener\"]\n  }), \"\\n    \", mdx(\"span\", _extends({\n    parentName: \"a\"\n  }, {\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"66.79536679536679%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAANABQDASIAAhEBAxEB/8QAGQAAAQUAAAAAAAAAAAAAAAAAAAECAwQF/8QAFQEBAQAAAAAAAAAAAAAAAAAAAAH/2gAMAwEAAhADEAAAAdJWTRZAr//EABoQAAIDAQEAAAAAAAAAAAAAAAABAxIiAgT/2gAIAQEAAQUCldCPTPWsQqvB/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPwE//8QAFREBAQAAAAAAAAAAAAAAAAAAEBH/2gAIAQIBAT8Bh//EABoQAAICAwAAAAAAAAAAAAAAAAABEBExQWH/2gAIAQEABj8Cyzii9lR//8QAHBAAAgICAwAAAAAAAAAAAAAAAREAECExUWFx/9oACAEBAAE/IT7GZYjOfN3WGJQFRSHtf//aAAwDAQACAAMAAAAQd8//xAAWEQADAAAAAAAAAAAAAAAAAAAQEWH/2gAIAQMBAT8QcH//xAAVEQEBAAAAAAAAAAAAAAAAAAAREP/aAAgBAgEBPxBKz//EAB0QAQEAAQQDAAAAAAAAAAAAAAERQQAQIaExUWH/2gAIAQEAAT8QoykoWXHGCd6Jh5Am1wmeJz1s1OAKUj80aRcl9u3/2Q==')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  })), \"\\n  \", mdx(\"img\", _extends({\n    parentName: \"a\"\n  }, {\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"A cartoon minion with arms in the air and text, \\\"let's get started\\\"\",\n    \"title\": \"Enthusiastic Minion\",\n    \"src\": \"/static/b0964860e29015189dd07a9bbb729630/b4294/get-started.jpg\",\n    \"srcSet\": [\"/static/b0964860e29015189dd07a9bbb729630/8356d/get-started.jpg 259w\", \"/static/b0964860e29015189dd07a9bbb729630/bc760/get-started.jpg 518w\", \"/static/b0964860e29015189dd07a9bbb729630/b4294/get-started.jpg 600w\"],\n    \"sizes\": \"(max-width: 600px) 100vw, 600px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\"\n  })), \"\\n  \"), \"\\n    \")), mdx(\"p\", null, \"Next: \", mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"/simply-learn-full-stack-1\"\n  }), \"Part 1, Create The Client\"), \", ...\"), mdx(\"p\", null, \"Code repo: \", mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"https://github.com/neohed/node-react-stack\"\n  }), \"Github Repository\")));\n}\n;\nMDXContent.isMDXComponent = true;"}},"pageContext":{"id":"b2d39b32-1682-5417-9f36-48b85c6d930b","prev":{"id":"926132dd-bb88-57a0-bc31-4b9579c53a0d","parent":{"name":"index","sourceInstanceName":"blog"},"excerpt":"Simply Learn Full-Stack React & Node.js Add a form to the React client site We're going to add a few components here to generate our form from our data.  There are much better libraries to do this, which we will look at later, but for now we will…","fields":{"title":"Simply Learn Full-Stack Web, Part 2","description":"Tutorial to learn full-stack with React node.js and Prisma DB","slug":"simply-learn-full-stack-2","absolutePath":"D:/Workspace/Github/neohed-blog/content/blog/learn-full-stack-simply-02/index.mdx","banner":null,"date":"2022-06-27T08:36:32"}},"next":{"id":"f627dbc6-3dce-5cac-bd70-07cbe3b26c04","parent":{"name":"index","sourceInstanceName":"blog"},"excerpt":"Simply Learn Full-Stack React & Node.js Create the React web-site Create a folder somewhere for your project. This will hold the client and server code.  I called mine:  node-react-stack  and will be using that folder name throughout. Inside the…","fields":{"title":"Simply Learn Full-Stack Web, Part 1","description":"Tutorial to learn full-stack with React node.js and Prisma DB","slug":"simply-learn-full-stack-1","absolutePath":"D:/Workspace/Github/neohed-blog/content/blog/learn-full-stack-simply-01/index.mdx","banner":null,"date":"2022-06-27T08:36:32"}}}}}